基礎(chǔ)設(shè)施即代碼 (IaC) 是一個自動化云資源供應(yīng)和管理的過程。IaC 軟件采用一些描述所需狀態(tài)的輸入腳本,然后通常通過 API 與云供應(yīng)商進行通信,以使現(xiàn)實與所需狀態(tài)相匹配。本文將涵蓋 IaC 的重要方面,首先是它是如何產(chǎn)生的(即它解決了哪些問題),然后是它的好處,最后是如何將 IaC 集成到您的組織中。
對 IaC 的需求
曾幾何時,當(dāng)企業(yè)想要運行軟件時,唯一的選擇是從網(wǎng)絡(luò)提供商處訂購一些物理設(shè)備和互聯(lián)網(wǎng)接入。這些是現(xiàn)場數(shù)據(jù)中心,公司必須根據(jù)預(yù)期流量提前數(shù)周甚至數(shù)月訂購服務(wù)器和網(wǎng)絡(luò)設(shè)備,然后在現(xiàn)場手動配置。這需要一個帶有冷卻系統(tǒng)的物理位置和無數(shù)小時來執(zhí)行安裝和維護操作。但是后來,出現(xiàn)了可以管理其他企業(yè)服務(wù)器的公共數(shù)據(jù)中心。
運營數(shù)據(jù)中心本身成為一項可行的業(yè)務(wù),為客戶帶來巨大優(yōu)勢:
- 無需專用且昂貴的服務(wù)器機房
- 通用服務(wù)器和網(wǎng)絡(luò)項目的交貨時間可能會縮短
- 由數(shù)據(jù)中心提供商處理的服務(wù)器/設(shè)備的物理管理
- 釋放寶貴的資源
虛擬化的出現(xiàn)帶來了另一種演變:云。在公共(或私有)云中,物理設(shè)備位于云供應(yīng)商的數(shù)據(jù)中心,仍然需要人工處理。虛擬服務(wù)器可通過 Web 界面供企業(yè)使用,使他們能夠在幾秒鐘內(nèi)(或最大資源的幾分鐘內(nèi))配置服務(wù)器和其他資源。在這個階段,雖然虛擬化允許非常快速的配置,但大多數(shù)操作仍然是手動的。
IaC 概念和工具的出現(xiàn)帶來了最終的發(fā)展。一旦可以通過 API 訪問云,資源的配置和管理就可以由腳本和自動化工具而不是人工來處理。所以現(xiàn)在,一旦安裝并連接了物理設(shè)備(仍然是手動操作),其他一切都可以自動化,包括所有虛擬硬件資源的配置。
以編程方式訪問公共云的能力促成了 IaC 的興起。在 IaC 出現(xiàn)之前,系統(tǒng)工程師必須手動通過 Web 界面來供應(yīng)和配置資源。使用 IaC,資源的供應(yīng)和配置在腳本中描述,這些腳本由與公共云 API 通信的工具讀取,以確保現(xiàn)實與所需狀態(tài)相匹配。
IaC 的好處
如上所述,IaC 工具使用來自腳本的輸入;這些腳本由人類編寫,描述了給定云資源的理想狀態(tài)。這些工具通過其 API 與云供應(yīng)商通信以創(chuàng)建、更新或刪除資源,以便現(xiàn)實與輸入腳本中描述的所需狀態(tài)相匹配。與手動供應(yīng)和配置相比,IaC 提供了單一的真實來源(輸入腳本),從而消除了大多數(shù)人為錯誤。
運行 IaC 腳本是一個可重復(fù)的操作,每次都會產(chǎn)生完全相同的結(jié)果。這可以在很多方面提供幫助,例如:
- 在不同位置和/或為不同項目部署相同的工作負載
- 創(chuàng)建單獨但相同(或接近相同)的環(huán)境(暫存、生產(chǎn)、測試??等)
- 通過從 IaC 腳本和生產(chǎn)環(huán)境的最后備份快速創(chuàng)建一個新的、相同的環(huán)境來執(zhí)行災(zāi)難恢復(fù)
IaC 腳本可以保存在 git 存儲庫中,為您提供基礎(chǔ)架構(gòu)的歷史記錄。作為額外的好處,由于腳本只是文本,因此可以比較版本以查看已添加、更改或刪除的內(nèi)容。
另一個好處是 IaC 允許初級系統(tǒng)管理員或非技術(shù)人員在沒有技術(shù)知識的情況下創(chuàng)建整個工作負載。如果您正確配置您的云帳戶,您甚至可以允許具有有限權(quán)限的用戶通過 IaC 工具創(chuàng)建這樣的工作負載,即使該用戶沒有直接創(chuàng)建資源的權(quán)限。您還可以利用額外的工具和模板來確保更早地實施安全策略,以限制實例化 IaC 堆棧的任何人造成安全漏洞和錯誤配置的可能性。
除了精確的可重復(fù)性之外,IaC 相對于手動操作的最大優(yōu)勢之一是它的可擴展性。事實上,您只需編寫一次 IaC 腳本,然后工作負載就可以隨心所欲地實例化,幾乎是即時的。最后,通過花更多時間在 IaC 腳本中設(shè)計正確的權(quán)限,可以避免手動工作向角色和資源授予過多權(quán)限的典型缺點。
如何開始
通常,您希望將當(dāng)前手動執(zhí)行的一些操作自動化。因此,第一步是記錄構(gòu)建工作負載所需基礎(chǔ)架構(gòu)所需的手動步驟。這些是您將通過 IaC 自動化的步驟。
然后你需要選擇一個 IaC 軟件。這應(yīng)該不是一個困難的選擇,因為只有少數(shù)幾個,而且三大云提供商都有自己的:Amazon Web Services 提供CloudFormation,Microsoft Azure 提供Azure Resource Manager,Google Cloud Platform 提供Google Cloud Deployment Manager。與供應(yīng)商無關(guān)的最著名的選項是Terraform,它不僅支持上述三個云供應(yīng)商,而且支持更多云供應(yīng)商。
接下來,您需要為您選擇的 IaC 工具編寫一些腳本,以重現(xiàn)您記錄的手動步驟。在進行過程中測試這些通常是個好主意。換句話說:編寫一些 IaC 代碼,部署它,測試它,當(dāng)你滿意它看起來不錯時,繼續(xù)下一段代碼。如果一次性編寫所有內(nèi)容,代碼中可能會出現(xiàn)重大缺陷,只有在工作數(shù)小時后才會發(fā)現(xiàn),這意味著您可能不得不重寫腳本的很大一部分。
左移
此外,Shift Left 的話題也持續(xù)上熱搜。這實質(zhì)上意味著您盡早開始測試并專注于預(yù)防問題(而不是在問題發(fā)生后檢測和解決)。這個想法是整體質(zhì)量和安全性將因此提高。
理想情況下,這種左移應(yīng)該盡可能地利用自動化。事實上,有多種工具可用于自動化編寫 IaC 腳本的某些方面,例如安全性和合規(guī)性。這些工具會在任何部署之前掃描代碼,以減少錯誤配置、過于寬松的設(shè)置和已知漏洞等問題的發(fā)生。此處提供了一些與此相關(guān)的用例供您細讀。
需要一個集中的團隊
為了正確使用 IaC,編寫 IaC 腳本的人必須對所使用的云平臺有深入的了解。因此,建議確保您的 IaC 工作中最關(guān)鍵的部分由高級 DevOps 工程師完成。
擁有一支(或至少一名)高級 DevOps 工程師團隊負責(zé)領(lǐng)導(dǎo)您的 IaC 工作通常是個好主意。該團隊將能夠?qū)W⒂谧罴褜嵺`和安全性,從而為更多初級工程師提供可遵循的藍圖。它還將能夠編寫可在組織內(nèi)跨 IaC 腳本重復(fù)使用的通用模塊,為更多初級工程師提供易于使用的預(yù)先審查的構(gòu)建塊。
如果嚴格的安全性很重要,并且很可能這個團隊也可以負責(zé)審查公開可用的模塊和軟件。在網(wǎng)上很容易找到一些 IaC 模塊;Terraform 甚至擁有這些的官方存儲庫。但是,此類公開可用的模塊可能不符合您的組織或項目中應(yīng)用的安全標準。因此,確保您的 IaC 團隊只使用經(jīng)過審查的模塊非常重要。
此外,讓您的 SecOps 團隊與您的 DevOps 團隊一起工作是個好主意。這種合作將使 DevOps 流程在項目早期的安全性方面得到優(yōu)化。生產(chǎn)部署后檢測到的錯誤可能代價高昂,尤其是在客戶關(guān)系方面。在過程的早期確保高質(zhì)量將大大有助于避免任何此類災(zāi)難。
結(jié)論
雖然 IaC 是最近才發(fā)展起來的,但現(xiàn)在 IaC 應(yīng)該成為任何需要云資源的組織的配置策略的重要組成部分,并且至少應(yīng)該對其進行評估以包含在您的團隊中。無論您的組織規(guī)模如何,您很可能希望 IaC 至少管理您的部分工作負載。